Virtualization environments provide multiple virtual machines (VMs) on a physical machine, with each VM looking like a full computer to “guest” software running inside the VM. This enables a user to concurrently run multiple copies of a guest operating system on one physical machine, with each guest operating system having its own copy of “virtual hardware.”
Many of today's virtualization environments support VM input/output (I/O) operations by providing virtual I/O devices that are emulated in software. This I/O virtualization approach has many advantages, including insulating the guest operating system from the specifics of physical hardware on which it is running. This insulation in turn simplifies the task of moving a VM from one physical server to another, a process referred to herein as “VM migration.” Such moves can occur “cold,” i.e., when the VM is not booted up; “warm,” i.e., when the VM is suspended and then resumed; or “hot,” i.e., when the VM is running and continues to run while it is moved from one physical server to another. With emulated virtual I/O devices, the emulated virtual I/O devices can run on any physical server, independent of the specifics of the physical I/O device. As such, a migrating VM continues to see the same set of virtual I/O devices across the migration. In essence, virtual I/O devices provide uniformity, with an emulation layer masking diversity at the level of physical I/O devices.
Another approach to providing VMs with I/O is to expose a subset of a physical machine's I/O infrastructure to each VM. The exposed physical I/O devices are then directly accessed by a guest device driver, e.g., software running inside the VM. This approach is referred to herein as “guest device pass-through” or simply “pass-through.” There are a number of benefits to guest device pass-through, one of which is better performance. I/O operations from within a VM are likely to be faster with pass-through I/O devices then with emulated virtual I/O devices.
The pass-through I/O virtualization approach, however, makes it difficult to migrate VMs from one physical machine to another in a transparent manner, because the specificity of physical I/O devices on the physical server is now exposed to guest software.